/*
 * @Author: shenya shenya0203@163.com
 * @Date: 2024-02-03 15:47:06
 * @LastEditors: shenya shenya0203@163.com
 * @LastEditTime: 2024-04-04 13:17:50
 * @FilePath: /code/src/device_control_data.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#ifndef __DEVICE_CONTROL_DATA__
#define __DEVICE_CONTROL_DATA__

#include <stdint.h>
#include "cJSON.h"

// 灯具
typedef struct
{
    uint8_t Bri : 7;          // 亮度，低7位
    uint8_t switch_power : 1; // 电源开关，高位
    uint8_t blue;             // 蓝色
    uint8_t red;              // 红色
    uint8_t green;            // 绿色
    uint8_t warm;             // 暖色
    uint8_t cool;             // 冷色
} LIGHT_DATA_t;               // 灯的控制数据的类型

typedef struct
{
    uint16_t deviceType; // 设备类型，灯的类型
    LIGHT_DATA_t data;   // 灯的控制数据
} LIGHT_t;               // 灯的数据集

extern uint8_t *lightControl_name[];
uint8_t light_control_OnOff(uint16_t addr, uint8_t OnOffState);
uint8_t light_control_Bright(uint16_t addr, uint8_t Bright);
uint8_t light_control_Bright_ColorTemp(uint16_t addr, uint8_t Bright, uint8_t warm, uint8_t cold);

int light_status_json(uint8_t *data, uint16_t dataLen, cJSON *json);

// 继电器开关
// 带使能掩码，对于保持原状态的不需要获该状态，若不带掩码则每次都发出控制命令
typedef struct
{
    uint8_t ctrl_mask;   // 控制使能
    uint8_t output_mask; // 真正输出内容
} SWITCH_DATA_t;         // 开关的控制数据的类型

typedef struct
{
    uint16_t deviceType; // 设备类型，开关的类型
    SWITCH_DATA_t data;  // 开关的控制数据
} SWITCH_t;              // 开关的数据集

uint8_t switch_control_OnOff(uint16_t addr, uint8_t OnOffState);
int switch_status_json(uint8_t *data, uint16_t dataLen, cJSON *json);
// 情景面板
// 传感器
//

#endif